package com.shujia.bigdata.map;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Demo2 {
    public static void main(String[] args) throws Exception {

        /**
         *
         * 统计每个学生的总分
         *
         */


        FileReader fileReader = new FileReader("java/data/score.txt");

        BufferedReader bufferedReader = new BufferedReader(fileReader);


        HashMap<String, Integer> map = new HashMap<>();


        String line;

        while ((line = bufferedReader.readLine()) != null) {

            String[] split = line.split(",");

            String sId = split[0];
            int score = Integer.parseInt(split[2]);

            /**
             * 判断mao=p集合中是否已经存在这个学生
             * 不存在：将当前科目的分数存进去
             * 存在：当前科目的分数加上之前科目的分数
             *
             * 当循环完成，所有学生的总分就出来了
             */

            Integer integer = map.get(sId);

            if (integer == null) {
                map.put(sId, score);
            } else {
                map.put(sId, score + integer);
            }
        }

        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            String sId = entry.getKey();
            Integer sumScore = entry.getValue();

            System.out.println(sId + "\t" + sumScore);

            /**
             * 1500100199	391
             * 1500100196	446
             *
             */
        }

        /**
         * 返回结果中需要有学生的基本信息
         *
         * 学号，姓名，班级，性别，总分
         */

        /**
         * 通过学生表中的学号获取总分表中的总分
         *
         */

        /**
         * 通过map实现join
         * 注意：大表关联小表，将小表放到map集合中，速度更快
         *
         */

        BufferedReader reader = new BufferedReader(new FileReader("java/data/students.txt"));


        //学生总分
        ArrayList<String> list = new ArrayList<>();

        String stu;
        while ((stu = reader.readLine()) != null) {
            String sId = stu.split(",")[0];

            //通过学号取出总分
            Integer sumScore = map.get(sId);

            String stuSco = stu + "," + sumScore;

            list.add(stuSco);

        }

        reader.close();

        System.out.println("==============================");

        /**
         * 统计每个班级的平均分
         * 1、统计每个学生的总分
         * 2、统计平均分
         *      班级所有学生的总分和除以班级学生人数
         *
         */

        //存每个班级的总分
        HashMap<String, Integer> sumScoreMap = new HashMap<>();


        //存每个班级的学生人数
        HashMap<String, Integer> numeMap = new HashMap<>();

        for (String s : list) {
            String[] split = s.split(",");
            String clazz = split[4];
            int score = Integer.parseInt(split[5]);

            //统计班级总分
            Integer integer = sumScoreMap.get(clazz);
            if (integer == null) {
                sumScoreMap.put(clazz, score);
            } else {
                sumScoreMap.put(clazz, score + integer);
            }


            //统计班级人数
            Integer integer1 = numeMap.get(clazz);

            if (integer1 == null) {
                numeMap.put(clazz, 1);
            } else {
                numeMap.put(clazz, integer1 + 1);
            }
        }

        System.out.println(sumScoreMap);

        System.out.println(numeMap);
        //计算班级平均分

        for (Map.Entry<String, Integer> entry : sumScoreMap.entrySet()) {
            String clazz = entry.getKey();
            Integer sumScore = entry.getValue();


            //获取班级人数
            Integer num = numeMap.get(clazz);

            //平均分
            int avg = sumScore / num;

            System.out.println(clazz + "\t" + avg);
        }


    }
}
